(() => {
    // 1.接口定义一个构造函数
    interface ClockConstructor1 {
        new(h: number, m: number)
    }
    // class Clock implements ClockCounstructor {
    //     constructor(h:number,m:number)  //报错，因为构造函数是静态方法，不在ts检查范围之内
    // }


    // 2.把构造函数抽离出来，用函数类型来检查
    // 描述实例部分
    interface ClockInterface {
        // 实例属性和方法
        currentDate: Date
        getTime(): void
    }

    // 描述静态部分
    interface ClockConstructor {
        new(h: number, m: number)
    }

    // 利用函数来检测构造函数类型
    function createdClock(C: ClockConstructor, h: number, m: number): ClockInterface {
        return new C(h, m)
    }

    class Clock implements ClockInterface {
        // 实现实例属性和方法
        h: number
        m: number
        currentDate = new Date()
        getTime() {
            console.log(`现在是${this.h}小时${this.m}分`);

        }

        // 实现静态部分-构造函数
        constructor(h: number, m: number) {
            this.h = h
            this.m = m
        }
    }

    let redClock = createdClock(Clock, 2, 15)
    console.log(redClock.currentDate);
    redClock.getTime()

})()